import pandas as pd
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
url = "https://raw.githubusercontent.com/bcaffo/MRIcloudT1volumetrics/master/inst/extdata/multilevel_lookup_table.txt"
multilevel_lookup = pd.read_csv(url, sep = "\t").drop(['Level5'], axis = 1)
multilevel_lookup = multilevel_lookup.rename(columns = {
"modify" : "roi",
"modify.1" : "level4",
"modify.2" : "level3",
"modify.3" : "level2",
"modify.4" : "level1"})
multilevel_lookup = multilevel_lookup[['roi', 'level4', 'level3', 'level2', 'level1']]
id = 127
subjectData = pd.read_csv("https://raw.githubusercontent.com/bcaffo/ds4bme_intro/master/data/kirby21.csv")
subjectData = subjectData.loc[(subjectData.type == 1) & (subjectData.level == 5) & (subjectData.id == id)]
subjectData = subjectData[['roi', 'volume']]
subjectData = pd.merge(subjectData, multilevel_lookup, on = "roi")
subjectData = subjectData.assign(icv = "ICV")
subjectData = subjectData.assign(comp = subjectData.volume / np.sum(subjectData.volume))
summary = subjectData[["icv", "level1", "level2"]].groupby(["icv", "level1", "level2"], as_index = False).mean()
summaryvol1 = subjectData[["icv", "level1", "volume"]].groupby(["icv", "level1"], as_index = False).sum()
summaryvol2 = subjectData[["icv", "level1", "level2", "volume"]].groupby(["icv", "level1", "level2"], as_index = False).sum()
unique_summary = pd.unique(summary.values.ravel())
unique_summary = unique_summary.tolist()
fig = go.Figure(data=[go.Sankey(
# Define nodes
node = dict(
pad = 15,
thickness = 15,
line = dict(color = "black", width = 0.5),
label = unique_summary
),
# Add links
link = dict(
source = [0, 1, 1, 1, 1, 0, 6, 6, 0, 9, 9, 0, 12, 12, 0, 15, 15, 0, 18, 18, 0, 21, 21, 21, 0, 25, 25, 25],
target = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28],
value = [109787, 33975, 30018, 44979, 815, 11817, 5475, 6342, 11560, 5188, 6372, 10271, 4945, 5326, 159411, 79498, 79913, 4975, 2403, 2572, 531153, 276982, 12381, 241790, 534444, 282874, 13077, 247493],
label = unique_summary
))])
fig.update_layout(title_text="MRICloud Sankey Diagram", font_size=10)
fig.show()